package controllers.common;

import java.io.File;
import java.util.Map;

import models.common.bean.CurrUser;
import models.common.entity.t_flow_switch;

import org.apache.commons.lang.StringUtils;

import play.Play;
import play.cache.Cache;
import play.db.jpa.Blob;
import play.mvc.Before;
import play.mvc.Scope.Session;
import services.common.ColumnService;
import services.common.FlowSwitchService;

import common.constants.CacheKey;
import common.constants.Constants;
import common.utils.BankCardBinUtil;
import common.utils.CropImage;
import common.utils.Factory;
import common.utils.ResultInfo;


/**
 * 前台控制器基类(拦截器优先级参数：6~10)
 *
 * @description 
 *
 * @author huangyunsong
 * @createDate 2015年12月21日
 */
public class FrontBaseController extends BaseController {
	
	/**栏目*/
	protected static ColumnService columnService = Factory.getService(ColumnService.class);
	
	/**控制器*/
	protected static FlowSwitchService flowSwitchService = Factory.getService(FlowSwitchService.class);
	/**
	 * 服务器关闭
	 *
	 * @author huangyunsong
	 * @createDate 2016年1月14日
	 */
	@Before(priority=5) 
	protected static void shutdownSystem() {
		/**前台开关控制器*/
		Map<String,t_flow_switch> flowMap=flowSwitchService.queryAllSwitchMap();
		
		t_flow_switch flow= flowMap.get(CacheKey.FOREGROUND_CONTROL);
		if(flow.platform_company == 1){
			renderTemplate("common/errors/http-shutdown-system.html");	
		}
		
	}
	/**
	 * 更新前台栏目名称同时刷新用户登录凭证(包括模拟登陆标志)
	 *
	 * @author huangyunsong
	 * @createDate 2016年1月14日
	 */
	@Before(priority=6) 
	protected static void frontSetting() {
		/** 前台栏目名称 */
		Map<String, String> columMap = columnService.queryAllColumsMap();
		
		/**前台开关控制器*/
		Map<String,t_flow_switch> flowMap=flowSwitchService.queryAllSwitchMap();
		
		renderArgs.put("columns", columMap);
		
		renderArgs.put("flow", flowMap);
		
		/** 更新用户登陆凭证 */
		CurrUser currUser = getCurrUser();
		if (currUser != null) {
			String sessionId = Session.current().getId();
			/* 刷新用户凭证有效时间 */
			Cache.set(CacheKey.FRONT_ + sessionId, currUser.id, Constants.CACHE_TIME_MINUS_30);
			/* 刷新用户信息缓存时间 */
			Cache.set(CacheKey.USER_ + currUser.id, currUser, Constants.CACHE_TIME_MINUS_30);
			
			Object isSimulated = Cache.get(CacheKey.SIMULATED_ + sessionId);	
			if(isSimulated != null){
				Cache.set(CacheKey.SIMULATED_ + sessionId, isSimulated, Constants.CACHE_TIME_MINUS_30);
				renderArgs.put("isSimulated", true);
			}
			
		}
		renderArgs.put("currUser", currUser);
	}
	
	/**
	 * 获取当前登陆用户信息
	 *
	 * @return
	 *
	 * @author huangyunsong
	 * @createDate 2016年1月14日
	 */
	public static CurrUser getCurrUser() {
		if (Session.current() == null) {
			
			return null;
		}

		String sessionId = Session.current().getId();
		if(StringUtils.isBlank(sessionId)) {
			
			return null;
		}
		
		Object userId = Cache.get(CacheKey.FRONT_ + sessionId);	
		if(userId == null){
			
			return null;
		}
		
		CurrUser currUser = (CurrUser)Cache.get(CacheKey.USER_ + userId);
		if(currUser == null) {
			
			return null;
		}
		
		return currUser;
	}
	
	/**
	 * 图片裁剪
	 *
	 * @param imgSrc
	 * @param x
	 * @param y
	 * @param w
	 * @param h
	 * @param imageType  图片格式
	 * @param createNewImg 裁剪后是否生成新图片
	 *
	 * @author liaijun
	 * @createDate 2017年07月15日
	 */
	public static void imageCrop(String imgSrc, int x, int y, int w, int h, String imageType, boolean createNewImg){
		ResultInfo result = new ResultInfo();
		
		if (StringUtils.isBlank(imgSrc)) {
			result.code = -1;
			result.msg = "图片路径错误!";
			
			renderJSON(result);
		}
		
		if(x <= 0 && y <= 0 && w <= 0 && h <= 0 ) {
			result.code = -1;
			result.msg = "请选择裁剪尺寸!";
			
			renderJSON(result);
		}
		//处理图片重载多出的字段
		if (imgSrc.contains("?t=")) {
			imgSrc = imgSrc.substring(0, imgSrc.indexOf("?t="));
		}
		String absoluteUrl = null;
		Blob blob = new Blob();
		
		if(imgSrc.startsWith("/public/")) {
			absoluteUrl = Play.applicationPath.getAbsolutePath() + imgSrc;
		} else {
			String uuid = ImagesController.compatibleUuid(imgSrc);
			absoluteUrl = blob.getStore()+File.separator+uuid;
		}
		
		CropImage cropImage = new CropImage(x, y, w, h);
		result = cropImage.crop(absoluteUrl, imageType, createNewImg);
		if(result.code < 0){
			result.code = -1;
			result.msg = "裁剪失败";
			
			renderJSON(result);
		}
		
		result.code = 1;
		result.msg = "裁剪成功";
		flash.remove("error");
		renderJSON(result);
	}
    /**
     * 校验银行卡号和选择的名称是否匹配
     * @Title: isExistenceBank 
     * @param  
     * @return: boolean
     * @author: pc   
     * @date: 2017年9月27日 下午4:47:06 
     * @version: V1.0
     */
	public boolean isExistenceBank(String bankCode,String compareName){
		return BankCardBinUtil.isExistenceBank(bankCode, compareName);
	}
}
